If-Match header

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Der HTTP-If-Match-Request-Header macht eine Anfrage bedingt. Ein Server wird Ressourcen für die Methoden GET und HEAD bereitstellen oder eine Ressource für PUT und andere unsichere Methoden hochladen, nur wenn die Ressource mit einem der ETag-Werte im If-Match-Request-Header übereinstimmt. Falls die Bedingung nicht übereinstimmt, wird stattdessen die Antwort 412 Precondition Failed zurückgegeben.

Der Vergleich mit dem gespeicherten ETag verwendet den starken Vergleichsalgorithmus, was bedeutet, dass zwei Dateien byteweise identisch sein müssen. Falls ein aufgelistetes ETag das W/-Präfix trägt, das auf einen schwachen Entity-Tag hinweist, wird dieser Vergleichsalgorithmus niemals passen.

Es gibt zwei übliche Anwendungsfälle:

  • Für die Methoden GET und HEAD, in Kombination mit einem Range-Header, kann sichergestellt werden, dass die neuen angeforderten Bereiche von derselben Ressource stammen wie der vorherige.
  • Für andere Methoden, und insbesondere für PUT, kann If-Match verwendet werden, um das Problem verlorener Aktualisierungen zu verhindern. Es kann überprüft werden, ob die Modifikation einer Ressource, die der Benutzer hochladen möchte, nicht eine andere Änderung überschreibt, die seit dem ursprünglichen Abruf der Ressource durchgeführt wurde.
Header-Typ Request-Header
Verbotener Request-Header Nein

Syntax

http
If-Match: <etag_value>
If-Match: <etag_value>, <etag_value>, …

Direktiven

<etag_value>

Entity-Tags, die die angeforderten Ressourcen eindeutig darstellen. Sie sind eine Zeichenfolge von ASCII-Zeichen, die in Anführungszeichen gesetzt sind (wie "675af34563dc-tr34"). Sie können mit W/ vorangestellt sein, um anzuzeigen, dass sie 'schwach' sind, d.h. dass sie die Ressource semantisch, aber nicht byteweise darstellen. Allerdings werden in einem If-Match-Header schwache Entity-Tags niemals matchen.

*

Der Asterisk ist ein spezieller Wert, der jede Ressource darstellt. Beachten Sie, dass dies als false matchen muss, wenn der Ursprungsserver keine aktuelle Darstellung für die Zielressource hat.

Beispiele

http
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-Match: "67ab43", "54ed21", "7892dd"

If-Match: *

Spezifikationen

Specification
HTTP Semantics
# field.if-match

Browser-Kompatibilität

Siehe auch